Info o padu aplikace
Otázka od: L?ikola Petr
2. 6. 2004 7:41
Zdravim konferenci,
mam program, ktery v IDE bezi naprosto vporadku, ale pokud ho spustim z exe tak
obcas padne. Potreboval bych nejakym zpusobem zjistit proc aplikace spadla a
nejlepe v jakem miste programu (v jake procedure). Nekde jsem neco zaslechl ,
ze je na to neco v jedi, ale nevim jak to a co mam pouzit.. Samozdrejme bych
kvuli tomu odladeni chtel delat co nejmensi zasahy do programu.
Zkusenosti s takovymto ladenim nemam zadne, tak bzch prosil o nejako podrobny
postup, kde co a jak.
Diky za info
S pozdravem petr Sikola
D5E, WXP, MSSQL2000
Odpovedá: Bohac Frantisek
2. 6. 2004 8:43
Ahoj,
muzes si do aplikace vlozit Exception Dialog (File-New-Other..zalozka
Dialogs), pokud mas instalovane JVCL.
Pri vyjimce se vyvola tento dialog a zobrazi info o tom, kde je chyba.
Aby jsi dostal kompletni vypis, je treba nechat generovat .map file (Project
Options-Linker) a ten pridavat k aplikaci.
S pozdravem
Frantisek Bohac
----- Original Message -----
From: "L?ikola Petr" <developer@efg.cz>
> Potreboval bych nejakym zpusobem zjistit proc aplikace spadla
> a nejlepe v jakem miste programu (v jake procedure).
Odpovedá: Petr Brant
2. 6. 2004 8:30
Osvedcilo se mi pouzit exceptdlg z JCL. Staci to dat do uses na prvni misto
v DPR, nastavit linker, aby generoval MAP soubor a uvidis primo nazev unitu
a cislo radku, kde to zbuchlo. A i jine veci - info o operacnim systemu,
natazenych modulech apod. Skvela vec od Petra Vonese. Ja jsem si to jeste
upravil, aby mi to chybovy log poslalo mailem.
Priklad zacatku takoveho vypisu:
Trida vyjimky: EOleException
Adresa vyjimky: 004DB2D3
----------------------------------------------------------------------------
----
Stav zasobniku 9.5.2003 12:03:11
[004DB2D3] MapPointOleContainer.TMapPointOleContainer.AddPointToTrace (Line
282, "MapPointOleContainer.pas" + 7) + $30
[00463D40] ComObj.SafeCallError + $F0
[00406DF3] System.@CheckAutoResult + $13
Zdravim
RNDr. Petr Brant [brant@dcomm.cz]
http://web.redbox.cz/petr.brant
D&COMM s.r.o.
Korunovacni 6
Praha 7
tel. +420724007234
mam program, ktery v IDE bezi naprosto vporadku, ale pokud ho
spustim z exe tak obcas padne. Potreboval bych nejakym zpusobem zjistit proc
aplikace spadla a nejlepe v jakem miste programu (v jake procedure).
Odpovedá: Karolina Nemanska
2. 6. 2004 10:21
Skvela vec!
Ale jedno by me zajimalo - pokud nedam k programu .map soubor a necham si ho
jen sama pro sebe - lze pak zpetne ziskat z adres stejny report, jako kdyby
byl .map u souboru - rucne nebo nejakym programem? Protoze .map je jednak
dost velky a druhak bych nerada, aby kazdy videl, jak pojmenovavam
komponenty ,-)
Diky, K.
----- Original Message -----
From: "Bohac Frantisek" <bohacf@vnol.cz>
To: <delphi-l@clexpert.cz>
Sent: Wednesday, June 02, 2004 8:47 AM
Subject: Re: Info o padu aplikace
> Ahoj,
>
> muzes si do aplikace vlozit Exception Dialog (File-New-Other..zalozka
> Dialogs), pokud mas instalovane JVCL.
>
> Pri vyjimce se vyvola tento dialog a zobrazi info o tom, kde je chyba.
>
> Aby jsi dostal kompletni vypis, je treba nechat generovat .map file
(Project
> Options-Linker) a ten pridavat k aplikaci.
>
> S pozdravem
>
> Frantisek Bohac
Odpovedá: L?ikola Petr
2. 6. 2004 10:42
No laboroval jsem s tim, ale bohuzel nic (na klasicke vyjimky to funguje), asi
jsem zapomel dodat, ze aplikace nehodi zadnou vyjimku, proste padne.. A jeste
ze aplikace je vicevlaknova s pristupem na databazi.
Petr Sikola
Odpovedá: Petr Vones
2. 6. 2004 12:55
From: "Karolina Nemanska" <lafidek@seznam.cz>
> Ale jedno by me zajimalo - pokud nedam k programu .map soubor a necham si ho
> jen sama pro sebe - lze pak zpetne ziskat z adres stejny report, jako kdyby
> byl .map u souboru - rucne nebo nejakym programem? Protoze .map je jednak
Ne, misto MAP souboru muzes pouzit JDBG soubor (komprimovany MAP, cca 12%
puvodni velikosti) nebo tyto data vlozit primo do EXE souboru pomoci IDE
experta nebo MAKEJCLDBG command-line utility.
> dost velky a druhak bych nerada, aby kazdy videl, jak pojmenovavam
> komponenty ,-)
To je videt i z DFM souboru v resource
Petr Vones
Odpovedá: Petr Vones
2. 6. 2004 12:46
From: "L?ikola Petr" <developer@efg.cz>
> No laboroval jsem s tim, ale bohuzel nic (na klasicke vyjimky to funguje),
> asi jsem zapomel dodat, ze aplikace nehodi zadnou vyjimku, proste padne.. A
> jeste ze aplikace je vicevlaknova s pristupem na databazi.
V jake verzi Delphi ? To vypada na neosetrenou vyjimku v threadu.
Petr Vones
Odpovedá: Karolina Nemanska
2. 6. 2004 13:06
Kdyz uz se o tom bavite - jak odladovat thready? lze nejak zpracovavat
vyjimky v nich podobne jako v mainthreadu, tj. aby vyskocil nejaky dialog +
odeslani na mail?
K.
----- Original Message -----
From: "Petr Vones" <pvones@vol.cz>
To: <delphi-l@clexpert.cz>
Sent: Wednesday, June 02, 2004 1:00 PM
Subject: Re: Info o padu aplikace
> From: "L?ikola Petr" <developer@efg.cz>
> > No laboroval jsem s tim, ale bohuzel nic (na klasicke vyjimky to
funguje),
> > asi jsem zapomel dodat, ze aplikace nehodi zadnou vyjimku, proste
padne.. A
> > jeste ze aplikace je vicevlaknova s pristupem na databazi.
>
> V jake verzi Delphi ? To vypada na neosetrenou vyjimku v threadu.
>
> Petr Vones
>
>
>
>
Odpovedá: delphin@post.cz
2. 6. 2004 15:39
> Kdyz uz se o tom bavite - jak odladovat thready? lze nejak zpracovavat
> vyjimky v nich podobne jako v mainthreadu, tj. aby vyskocil nejaky dialog
+
> odeslani na mail?
Vyjimky ve vlaknech jde dobre analyzovat v TThread.DoTerminate.
Odpovedá: Petr Vones
4. 6. 2004 10:42
From: "Karolina Nemanska" <lafidek@seznam.cz>
> Kdyz uz se o tom bavite - jak odladovat thready? lze nejak zpracovavat
> vyjimky v nich podobne jako v mainthreadu, tj. aby vyskocil nejaky dialog +
> odeslani na mail?
Daji, dokonce je to udelane i v JCL (i kdyz tohle se zrovna prilis nepovedlo).
Problem je ale v tom, ze interakce s uzivatelem pri vyjimce v threadu neni
zrovna stastne reseni, zvlaste v pripade kdyz vzniknou vyjimky ve vice
threadech najednou. Kazde takove zobrazeni dialogu je nutne synchronizovat s
hlavnim threadem coz zbytecne blokuje beh aplikace.
Lepsim resenim je ukladat vyjimky do nejakeho souboru a z neho pak provest
souhrnny report napriklad pri dalsim spusteni aplikace nebo jinou samostatnou
aplikaci k tomu ucelu zhotovenou. Tady se ale asi neda poradit nejake zcela
univerzalni reseni, to totiz zalezi na dane aplikaci. Nicmene s pouzitim
JclDebug je mozne si takovou vec napsat dle vlastnich pozadavku.
Petr Vones